﻿// Artificial Intelligence for Humans
// Volume 1: Fundamental Algorithms
// C# Version
// http://www.aifh.org
// http://www.jeffheaton.com
//
// Code repository:
// https://github.com/jeffheaton/aifh
//
// Copyright 2013 by Jeff Heaton
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// For more information on Heaton Research copyrights, licenses
// and trademarks visit:
// http://www.heatonresearch.com/copyright
//
using System.Collections.Generic;
using AIFH_Vol1.Core;
using AIFH_Vol1.Core.General.Data;
using AIFH_Vol1.Core.Learning.Score;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UnitTests.Core.Learning.Score
{
    [TestClass]
    public class TestScoreClassificationData
    {
        public static double[][] TestInput = {
            new [] {0.0, 0.0},
            new [] {1.0, 0.0},
            new [] {0.0, 1.0},
            new [] {1.0, 1.0}
    };

        public static double[][] TestIdeal = {
            new [] {0.0},
            new [] {1.0},
            new [] {1.0},
            new [] {0.0}
    };


        [TestMethod]
        public void TestClassification()
        {
            double[] actual = { 0.0, 1.0, 0.0, 0.0 };
            IList<BasicData> training = BasicData.ConvertArrays(TestInput, TestIdeal);
            var score = new ScoreClassificationData(training);
            var simple = new SimpleAlgo(actual);
            double s = score.CalculateScore(simple);
            Assert.AreEqual(0.25, s, AIFH.DefaultPrecision);
        }
    }
}
